package dxf.entities;


import dxf.DXFPoint;
import dxf.annotations.DXFPointProperty;
import dxf.annotations.DXFProperty;

/**
 * Definisce le informazioni base di una Entity Dimension
 * 
 * @author Andrea Zonca
 * @author Michele Brignoli
 * @version 3.0
 */
public abstract class Dimension extends Entity {
	
	private static int dimCount = 0;
	
	public static final String MEASUREMENT_TEXT="<>";
	
	@DXFProperty(100)
	private String marker="AcDbDimension";
	
	/**
	 * Il nome del blocco che contiene le entities che compongono la dimension 
	 */
	@DXFProperty(2) 
	private String dimBlock;
	
	/**
	 * Il punto che definisce la posizione della dimension line
	 */
	@DXFPointProperty(xCode=10,yCode=20,zCode=30)
	protected DXFPoint definitionPoint;
	
	/**
	 * Il punto che definisce la posizione del centro del testo
	 */
	@DXFPointProperty(xCode=11,yCode=21,zCode=31)
	private DXFPoint textMiddlePoint;
	
	/**
	 * Indica il tipo di Dimension.
	 * Deve essere settato nelle sottoclassi
	 */
	@DXFProperty(70)
	protected int dimensionType;

	
	/**
	 * La dimensione del testo visualizzato. Usare MEASUREMENT_TEXT combinato
	 * con suffissi/prefissi per ottenere il testo desiderato.
	 */
	@DXFProperty(1)
	private String dimensionText=MEASUREMENT_TEXT;

	/**
	 * Crea un'istanza di Dimension, incrementando <code>dimCount</code> e
	 * usando tale valore come <code>dimBlock</code> 
	 */
	public Dimension() {
		dimCount++;
		dimBlock = "D"+dimCount;
	}
	
	/**
	 * Restituisce il definitionPoint
	 * @return il punto che definisce la posizione della dimension line
	 */
	public DXFPoint getDefinitionPoint() {
		return definitionPoint;
	}
	
	/**
	 * restituisce il TextMiddlePoint
	 * @return Il punto che definisce la posizione del centro del testo
	 */
	public DXFPoint getTextMiddlePoint() {
		return textMiddlePoint;
	}

	/**
	 * Restituisce la DimensionType
	 * @return il tipo di Dimension
	 */
	public int getDimensionType() {
		return dimensionType;
	}

	/**
	 * Restituisce la dimensione del testo visualizzato.
	 * @return la dimensione del testo
	 */
	public String getDimensionText() {
		return dimensionText;
	}

	/**
	 * Imposta il testo della Dimension
	 * @param dimensionText il testo da impostare
	 */
	public void setDimensionText(String dimensionText) {
		this.dimensionText = dimensionText;
	}

	/**
	 * Restituisce il Marker della sottoclasse
	 * @return il marker
	 */
	public String getMarker() {
		return marker;
	}

	/**
	 * Restituisce il nome del blocco
	 * @return il nome del blocco
	 */
	public String getDimBlock(){
		return dimBlock;
	}
}
